package com.regent.central.bill.repository.mrp;

import com.regent.central.bill.core.mrp.BillMaterialDelivery;
import com.regent.central.bill.repository.mrp.dto.delivery.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.time.LocalDateTime;
import java.util.List;

@Repository
public interface BillMaterialDeliveryMapper extends Mapper<BillMaterialDelivery> {
    List<String> findIdsForPage(BillMaterialDeliveryPageParam param);

    Integer totalCount(BillMaterialDeliveryPageParam param);

    List<BillMaterialDeliveryListDTO> findDetailByIds(@Param("deliverIds") List<String> deliverIds);

    List<BillMaterialDeliveryListDTO> findDetailById(@Param("deliverId") String deliverId);

    List<String> findDeliveryOrdersByUnitId(String unitId);

    /**
     * 统计某个组织在某个时间段内的送料单数量
     *
     * @param unitId    组织ID
     * @param dateStart 时间段
     * @param dateEnd   时间段
     * @return 送料单数量
     */
    int countBillDeliveryByUnitId(@Param("unitId") String unitId, @Param("dateStart") LocalDateTime dateStart, @Param("dateEnd") LocalDateTime dateEnd);

    /**
     * 送料单基本信息
     *
     * @param id
     * @return
     */
    BillMaterialDeliveryDTO findDeliveryById(@Param("id") String id);

    /**
     * 送料单详情信息（包含bom信息）
     *
     * @param id 送料单id
     * @return
     */
    List<BillMaterialDeliveryOrderDTO> findDeliveryOrderById(@Param("id") String id);

    /**
     * 撤销送料单
     *
     * @param billMaterialDeliveryId 送料单ID
     */
    int undoBill(String billMaterialDeliveryId);

    /**
     * 查送料单下的所有送料上报ID
     *
     * @param billMaterialDeliveryId 送料单ID
     * @return 上报ID列表
     */
    List<String> listActionReportIds(String billMaterialDeliveryId);

    /**
     * 获取送料单工单物料的送料数量
     *
     * @param billMaterialDeliveryId 送料单ID
     */
    List<BillMaterialDeliveryUndoSkuDTO> listFacMissionSkuQuantity(String billMaterialDeliveryId);
}